
// 引入依赖包
import store2 from "store2";

// 引入接口文件
import { login, getUserInfo, logout } from "@/api/user";

import { deepTree } from "@/utils"

import router from "@/router";

// 假的 menus 数据
import mockMenus from "@/utils/menus";

export default {
    // 设置命名空间
    namespaced: true,

    state: {
        // 用于判断用户是否已经添加过动态路由
        isAdd: false,
        // 获取用户token
        token: store2.get("token") || '',
        // 获取用户信息
        info: store2.get("info") || '',
        // 获取用户权限的菜单数据
        menus: store2.get("menus") || [],
        routes: store2.get("routes") || []
    },
    mutations: {
        setIsAdd(state, payload) {
            state.isAdd = payload;
        },
        setToken(state, payload) {
            state.token = payload;
            // 使用store2的包来讲token存储到本地存储
            store2.set('token', payload)
        },
        setInfo(state, payload) {
            state.info = payload;
            store2.set('info', payload)
        },
        setMenus(state, payload) {
            state.menus = payload;
            store2.set('menus', payload);
        },
        setRoutes(state, payload) {
            state.routes = payload;
            store2.set('routes', payload);
        }
    },
    actions: {
        //登录动作 
        async login({ commit }, payload) {//这个login属于仓库的动作

            // 下面行这个login属于在api中定义的请求登录的方法
            const data = await login(payload);
            // 走到这里说明登陆成功
            // 1. 将 data.token 写入 store
            commit("setToken", data.token);

            return data;
        },

        // 登录退出动作
        async logout({ commit }, flag = true) {
            flag && (await logout());
            // 清理数据
            commit('setIsAdd', false);
            store2.clearAll();
            router.replace('/login')
        },

        //获取个人信息动作
        async getPerson({ commit }) {
            const data = await getUserInfo();
            commit("setInfo", data.info);
            console.log('data111',data);
            const list = data.menus.filter((item) => item.type !== 2);
            commit("setMenus", deepTree(list));

            // 过滤出type为1的，然后映射出router字段
            const routes = data.menus.filter((item) => item.type === 1).map((item) => item.router);
            commit("setRoutes", routes);

            return data.menus.filter(item => item.type === 1)
        }
    }
}